package com.jumi.microservice.service;


import com.jumi.microservice.domain.dto.AccountDTO;
import com.jumi.microservice.domain.dto.LogDTO;
import com.jumi.microservice.domain.dto.LoginLogDTO;
import com.jumi.microservice.domain.dto.PriorityDTO;
import com.jumi.microservice.domain.vo.AccountQuery;
import com.jumi.microservice.domain.vo.ImAuthVO;
import com.jumi.microservice.domain.vo.LoginLogQuery;
import com.jumi.microservice.domain.vo.OperateLogQuery;

import javax.servlet.http.HttpServletRequest;
import java.util.List;


/**
 * 账号管理service组件接口
 * @author Administrator
 */
public interface AccountService {

    /**
     * 分页查询账号
     *
     * @param accountQuery 前端账号查询条件
     * @return 账号集合
     */
    List<AccountDTO> listAccountByPage(AccountQuery accountQuery);

    /**
     * 根据账号id查询账号
     *
     * @param id 账号id
     * @return 账号
     */
    AccountDTO getAccountById(Long id);

    /**
     * 根据账号uid查询账号
     * @param uid
     * @return
     */
    AccountDTO getAccountByUid(Long uid);

    /**
     * 新增账号
     *
     * @param account 账号
     * @param request HttpServletRequest
     * @return 处理结果
     */
    void saveAccount(AccountDTO account, HttpServletRequest request);

    /**
     * 更新账号
     *
     * @param account 账号
     * @param request HttpServletRequest
     * @return 处理结果
     */
    void updateAccount(AccountDTO account, HttpServletRequest request);

    /**
     * 删除账号
     *
     * @param ids 账号ids,支持批量删除,账号ID以逗号分割
     * @param request HttpServletRequest
     * @return 处理结果
     */
    void removeAccountById(String ids, HttpServletRequest request);

    /**
     * 账号状态启用/停用
     * @param id 主键id
     * @param status 状态 (1启用，0.禁用)
     * @param request HttpServletRequest
     */
    void enableStatus(Long id, Integer status, HttpServletRequest request);

    /**
     * 登录次数分页查询
     *
     * @param loginLogQuery 查询条件
     * @return 账号登录次数日志集合
     */
    List<LoginLogDTO> listAccountLoginByPage(LoginLogQuery loginLogQuery);

    /**
     * 操作日志分页查询
     *
     * @param operateLogQuery 查询条件
     * @return 账号
     */
    List<LogDTO> listAccountOperateLogByPage(OperateLogQuery operateLogQuery);


    /**
     * 获取im客服权限
     * @param adminID
     * @return
     */
    String listImPriority(Long adminID);
}
